home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / Bonus.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  2KB  |  132 lines

  1. #include "stdafx.h"
  2.  
  3. #include <string.h>
  4.  
  5. cBonus *bonus = 0, *bonus_belowscreen = 0, *bonus_abovescreen = 0;
  6.  
  7. cBonus::cBonus(int _x, int _y, char *name)
  8.     : cGameObject(cProperties::find_w_error("BONUS", name))
  9.     add((cList **)&bonus);
  10.     
  11.     set_sequence("MOVING", TRUE);
  12.     
  13.     set_position(_x, _y);
  14. }
  15.  
  16. cGameObject *cBonus::make(int x, int y, cProperties *props)
  17. {
  18.     if (eq(props->name, "MINE"))
  19.         return new cBonusMine(x, y);
  20.     
  21.     if (eq(props->name, "SPREAD"))
  22.         return new cBonusSpread(x, y);
  23.     
  24.     if (eq(props->name, "JETPACK"))
  25.         return new cBonusJetpack(x, y);
  26.     
  27.     if (eq(props->name, "ROCKET"))
  28.         return new cBonusRocket(x, y);
  29.     
  30.     if (eq(props->name, "THUMPER"))
  31.         return new cBonusThumper(x, y);
  32.     
  33.     //if (eq(props->name, "HEALTH"))
  34.     return new cBonusHealth(x, y);
  35. }
  36.  
  37. int cBonus::control()
  38. {
  39.     cGameObject::control();
  40.  
  41.     bounce_on_boundaries();
  42.  
  43.     // Check if we were hit
  44.  
  45.     if (explode)
  46.     {
  47.         new cEffect (x, y, orig, "EXPLODE");
  48.     
  49.         return FALSE;
  50.     }
  51.  
  52.     // Check if we are to be picked up
  53.         
  54.     cCharacter *c = (cCharacter *)check_radial_boundaries(circle_bounds, players);
  55.     
  56.     if (c != 0)
  57.     {
  58.         pickup(c);
  59.  
  60.         new cEffect (x, y, orig, "PICKUP");
  61.  
  62.         return FALSE;
  63.     }
  64.     
  65.     return !in_water();
  66. }
  67.  
  68. void cBonus::pickup(cCharacter *)
  69. {
  70. }
  71.  
  72. cBonusMine::cBonusMine(int _x, int _y) : cBonus(_x, _y, "MINE")
  73. {
  74. }
  75.  
  76. void cBonusMine::pickup(cCharacter *c)
  77. {
  78.     new cInventoryMine (&(c->weapon_down));
  79. }
  80.  
  81. cBonusSpread::cBonusSpread(int _x, int _y) : cBonus(_x, _y, "SPREAD")
  82. {
  83. }
  84.  
  85. void cBonusSpread::pickup(cCharacter *c)
  86. {
  87.     new cInventorySpread (&(c->weapon));
  88. }
  89.  
  90. cBonusJetpack::cBonusJetpack(int _x, int _y) : cBonus(_x, _y, "JETPACK")
  91. {
  92. }
  93.  
  94. void cBonusJetpack::pickup(cCharacter *c)
  95. {
  96.     c->jetpack_time += JETPACK_TIME;
  97. }
  98.  
  99. cBonusRocket::cBonusRocket(int _x, int _y) : cBonus(_x, _y, "ROCKET")
  100. {
  101. }
  102.  
  103. void cBonusRocket::pickup(cCharacter *c)
  104. {
  105.     new cInventoryRocket (&(c->weapon));
  106. }
  107.  
  108. cBonusThumper::cBonusThumper(int _x, int _y) : cBonus(_x, _y, "THUMPER")
  109. {
  110. }
  111.  
  112. void cBonusThumper::pickup(cCharacter *c)
  113. {
  114.     new cInventoryThumper (&(c->weapon_down));
  115. }
  116.  
  117. cBonusHealth::cBonusHealth(int _x, int _y) : cBonus(_x, _y, "HEALTH")
  118. {
  119. }
  120.  
  121. void cBonusHealth::pickup(cCharacter *c)
  122. {
  123.     // Give extra armour
  124.     
  125.     c->armor += 34;
  126.     
  127.     // Display percentage above player
  128.     
  129.     c->set_text_above(construct("%d%%", c->armor <= 0? 0:c->armor), sec);
  130. }
  131.